package com.zhb.cloud.distribution.lock;

import java.util.concurrent.TimeUnit;

/**
 * @ClassName: RedisLock 接口定义
 * @Description:RedisLock 接口定义
 * @author: zhb zhb1316783262@163.com
 * @date: 2017年11月14日 下午6:47:17
 *
 */
public interface DistributionLockFactory {
	/**
	 * @Description: 阻塞性的获取锁, 不响应中断
	 * @author: zhb zhb1316783262@163.com
	 * @date: 2017年11月14日 下午7:20:12
	 */
	void lock();

	/**
	 * @Description:指定时间内获取不到立即返回, 不阻塞
	 * @author: zhb zhb1316783262@163.com
	 * @date: 2017年11月14日 下午7:19:44
	 * @param leaseTime
	 * @param unit
	 */
	void lock(long leaseTime, TimeUnit unit);

	/**
	 * 尝试获取锁, 获取不到立即返回, 不阻塞
	 */
	boolean tryLock();

	/**
	 * @Description: 超时自动返回的阻塞性的获取锁, 不响应中断
	 * @author: zhb zhb1316783262@163.com
	 * @date: 2017年11月14日 下午7:19:02
	 * @param time
	 * @param unit
	 * @return
	 */
	boolean tryLock(long time, TimeUnit unit);

	/**
	 * @Description: 释放锁
	 * @author: zhb zhb1316783262@163.com
	 * @date: 2017年11月14日 下午7:17:20
	 */
	void unlock();

	/**
	 * @Description:判断是否锁定
	 * @author: zhb zhb1316783262@163.com
	 * @date: 2017年11月14日 下午7:17:11
	 * @return
	 */
	boolean isLocked();
}
